package com.hongyu.smart.village.util;

import static com.google.common.base.Strings.isNullOrEmpty;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtil {
    /**
     * •  中文验证
     * •  @param str
     * •  @return
     * */
    public static boolean isAllChinese(String str){
        if(isNullOrEmpty(str))
            return true;
        String overseerInfo = "^([\\u4e00-\\u9fa5]|\\ue82d)+$";
        Pattern pattern= Pattern.compile(overseerInfo);
        Matcher matcher=pattern.matcher(str);
        if(!matcher.matches()){
            return false;
        }
        return true;
    }
    /** *验证身份证
     * •  @param identNum
     * •  @return
     * */
    public static boolean isIdentNum(String identNum) {
        //二代身份证的长度
        if (identNum.length() != 18) {
            return false;
        }
        //验证二代身份证的格式
        Pattern pattern = Pattern.compile("[0-9]{10}[0,1]{1}[0-9]{1}[0,1,2,3]{1}[0-9]{4}([0-9]|[X]){1}");
        if (!pattern.matcher(identNum).matches()) {
            return false;
        }
        int year = Integer.parseInt(identNum.substring(6, 10));
        int month = Integer.parseInt(identNum.substring(10, 12));
        int day = Integer.parseInt(identNum.substring(12, 14));
        //验证年份是否超出常规
        if (year < 1800 || year > 2100) {
            return false;
        }
        //验证月份是否有效
        if (month < 1 || month > 12) {
            return false;
        }
         //验证天数是否有效
         int[] monthDayNum;
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            monthDayNum = new int[] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31,30, 31 };
        }
        else { monthDayNum = new int[] {
                31, 28, 31, 30, 31, 30, 31, 31, 30, 31,30, 31 };
        }
        if (day < 1 || day > monthDayNum[month - 1]) {
            return false;
        }
        //验证因子是否有效
            int[] factor = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5,8, 4, 2, 1 };
        String[] parity = new String[] { "1", "0", "X", "9", "8", "7", "6","5", "4", "3", "2" };
        int sum = 0;
        for (int i = 0; i < 17; i++) {
            sum += Integer.parseInt(identNum.substring(i, i + 1)) * factor[i];
        }
        int bitIndex = sum % 11;
        String checkBit=identNum.substring(17);
        if (!checkBit.equals(parity[bitIndex])) {
            return false;
        }
        return true;
        }

    public static boolean isMobilePhone(CharSequence inputStr) {

        String mobile ="\"^1[3-9]\\\\d{9}$\"";//最新的电话正则表达式与平台保持一致
        Pattern pattern=Pattern.compile(mobile);
        Matcher matcher=pattern.matcher(inputStr);
        if(!matcher.matches()){
            return false;
        }
        return true;
    }
}
